home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 February: Tool Chest / Apple Developer CD Series Tool Chest February 1996 (Apple Computer)(1996).iso / Tool Chest / Testing & Debugging / Debuggers & dcmds / MacsBug 6.5.2 / MacsBug 6.5 Release Notes < prev    next >
Encoding:
Text File  |  1995-07-27  |  82.5 KB  |  1,676 lines  |  [TEXT/MPS ]

  1. ==========================================
  2.  MacsBug Release Notes and Bedtime Tales
  3. An ongoing release history for MacsBug 6.5
  4.       by Jim Murphy and Dave Lyons
  5. ==========================================
  6.  
  7. • 6.5.2  - Released 7/26/95
  8.  
  9.  
  10.            •• NOTE •• - MacsBug 6.5.1 was never released, so please be sure to read what changed in that
  11.            •• NOTE •• - version since it's not repeated here, but is significant.
  12.  
  13.  
  14.            MIXED MODE STEPPING
  15.            -------------------
  16.  
  17.            You can now step across all Mixed Mode transitions. This means that when you come up to a
  18.            MixedModeMagic trap, stepping once more lands on the first instruction on the other side,
  19.            whether it's 68K or PowerPC. Similarly, when you're stepping through PowerPC code that
  20.            calls the functions CallUniversalProc or CallOSTrapUniversalProc, you will automatically
  21.            land on the other side of the call. When returning from a 68K routine to PowerPC code or
  22.            vice-versa, stepping the return instruction will take you back to the caller, whether it's
  23.            68K or PowerPC. There should be no instances where stepping takes you into Mixed Mode itself
  24.            (so if you're debugging Mixed Mode, use another debugger).
  25.  
  26.            Mixed Mode stepping works equally well with accelerated ("fat") resources. If your 68K code
  27.            loads and calls into a fat resource, you can simply step right into it.
  28.  
  29.            NMIs IN NATIVE CODE
  30.            -------------------
  31.  
  32.            Using the NMI key sequence, you can now interrupt native code execution, and will land on the
  33.            PowerPC instruction you interrupted. However, due to reentracy concerns, you cannot interrupt
  34.            in the middle of Mixed Mode execution, you'll land in 68K code like you used to do with older
  35.            versions of MacsBug.
  36.  
  37.            BUS ERROR CATCHING ON POWERPC
  38.            -----------------------------
  39.  
  40.            Bus error handling on the first-generation PowerPC machines (6100/7100/8100) now works. This
  41.            really wasn't a bug in MacsBug, but I fixed it anyway. The problem was that the sound-in
  42.            component trashes the bus error vector when it is loaded (this is the case in 7.5 and 7.5.1). 
  43.            MacsBug now takes care of the component load through a magical patch, and fixes up the bus
  44.            error vector if it becomes damaged. See, MacsBug really is system software.
  45.  
  46.            POWERPC STACK CRAWL
  47.            -------------------
  48.  
  49.            Fixed the infinite loop bug in the “SC” command when walking back over PowerPC->68K switch
  50.            frames (mentioned in the 6.5.1 release notes).
  51.  
  52.            POWERPC DEBUGGER/DEBUGSTR CALLS
  53.            -------------------------------
  54.  
  55.            When you execute a Debugger or DebugStr in native code, you should no longer land in the
  56.            implementation (in InterfaceLib at present), you'll be in your own code right after the branch
  57.            to the library where they live.
  58.  
  59.            POWERPC STEPPING
  60.            ----------------
  61.  
  62.            Stepping or tracing with a count now works in PowerPC code.
  63.  
  64.            POWERPC REGISTER DISPLAY
  65.            ------------------------
  66.  
  67.            When on a PowerPC machine, we now show the current interrupt mask in place of the Memory
  68.            Manager mode in the left sidebar area (you're always in 32-bit mode). This is shown (and is
  69.            correct) when in both 68K or PowerPC code.
  70.  
  71.            The current interrupt mask is shown in the PowerPC register set when the “TD” command is used.
  72.  
  73.            Changed “TF” command to show the exponent and sign of each FPR as one component.
  74.  
  75.            REGISTER ASSIGNMENT
  76.            -------------------
  77.  
  78.            You can now set and get A5 when in both 68K and PowerPC code. For the moment, this is the only
  79.            68K register you can get to since it's the most useful. This means that macros like “thecport”
  80.            work regardless of the current instruction set.
  81.  
  82.            The 68020-040 register formerly known as “DFC” (Data Function Code) must now be called “RDFC”
  83.            so it's no longer hex (nobody cares about this register anyway).
  84.  
  85.            COMMANDS FIXED/ADDED
  86.            --------------------
  87.  
  88.            Added a new command "STAT" and incorporated it into the StdLog macro. It shows lots of useful
  89.            information you can see on the screen, but have never had an easy way of getting into the log
  90.            (at least not very concisely). For instance, it identifies the names of all shipping machines
  91.            that have unique box flag values, shows used stack space, max-used stack space when available,
  92.            and ResErr/MemErr when they are nonzero.
  93.  
  94.            The “EA” (Exit to Application) and “ES” (Exit to Shell) commands now work when you're in PowerPC
  95.            code.
  96.  
  97.            The “IR” (Instruction list to Return) command now works in PowerPC code with no address.
  98.  
  99.            “IRP” (Instruction list to Return PowerPC) command has been added.
  100.  
  101.            “GTP” (Go Till in PowerPC code) command has been added.
  102.  
  103.            Restarting (RS/RB) now works in a general way on PCI-based machines. It used to need a box flag 
  104.            table, which was a work-around for early developmental ROMs without a reasonable Gestalt selector
  105.            to identify that the machine needed a hard reset to restart.
  106.  
  107.            The “DMA” (Display Memory ASCII) command now honors the DITTO mode.
  108.  
  109.            WH COMMAND
  110.            ----------
  111.  
  112.            When displaying the CFM library an address lives in, we now display the executable and writable
  113.            status of the section the address is in (if any).
  114.  
  115.            If an address is in low memory, we now say so (instead of saying it's in RAM but not in a know heap).
  116.  
  117.            A-TRAP RECORDING ON QUADRA/PERFORMA 63x AND POWERBOOK 150
  118.            ---------------------------------------------------------
  119.  
  120.            It works, and doesn't make your machine crash. I really don't want to tell you why 'cause it
  121.            would make a great puzzle page.
  122.  
  123.            A-TRAP ACTIONS
  124.            --------------
  125.  
  126.            A-Trap tracing and recording no longer mask trap values into the A000-A0FF and A800-ABFF range
  127.            when displaying them, all bits are shown as-is when the trap was executed.
  128.  
  129.            A-Trap trace now shows the name of the real call that was made if the trap is selector-based
  130.            (dispatched), rather than the trap. This means you'll see traces with information such as
  131.            “SameProcess” instead of “OSDispatch”, which is much more useful.
  132.  
  133.            A-Trap recording and tracing now identifies Enqueue and Dequeue as stack-based traps rather
  134.            than register-based (they aren't).
  135.  
  136.            A-Trap break, trace, and step-spy logic has been fixed so you can now have combinations of them
  137.            pending at the same time that actually work. In the past you couldn't have a trace and a break
  138.            work at the same time, the first one that was activated got precedence. This means you can now
  139.            have multiple trace ranges and they'll work as well.
  140.  
  141.             Fixed the long-standing (since November 24, 1992, to be exact) bug where you'd land near a TRAP #$D
  142.            inside MacsBug if you stepped over an A-Trap that had a break action set on it.
  143.  
  144.            Setting an A-Trap break while in PowerPC code works (I was stupid and failed to install the
  145.            A-Trap dispatcher patch).
  146.  
  147.            68K DISASSEMBLY
  148.            ---------------
  149.  
  150.            When disassembling a MixedModeMagic trap (0xAAFE) that's at the current 68K PC, we now show the
  151.            address that you'll land if you step across the mode transition, as well as the destination
  152.            instruction set.
  153.  
  154.            When disassembling an A-Trap instruction, the comment field now contains the implementation
  155.            address of the trap, rather then the trap word. It's already shown off to the right anyway.
  156.  
  157.            POWERPC DISASSEMBLY
  158.            -------------------
  159.  
  160.            When disassembling PowerPC code that uses an offset off of R0, we now look up macros for that
  161.            address. For example, instead of getting this disassembly:
  162.            
  163.                            lwz r3, 0x064F(0)
  164.                         
  165.            you'll get:
  166.            
  167.                            lwz r3, JFlushCache(r0)
  168.  
  169.  
  170.            Throughout PowerPC disassembly all fields are now shown in hex instead of decimal.
  171.  
  172.            The symbol lookup code now lets tracebacks win if they're at the same address as a previously
  173.            found CFM export. This lets the disassembler munch the embedded data making the disassembly look
  174.            nicer (and smaller).
  175.  
  176.            The glue sniffer can now identify Microsoft-style cross-TOC glue.
  177.  
  178.            SYMBOL LOOKUP
  179.            -------------
  180.  
  181.            I drastically sped up CFM/traceback lookups over 6.5.1 so MacsBug is usable again.
  182.  
  183.            Optimized embedded 68K symbol lookup so it's about 10% faster.
  184.  
  185.            MISCELLANEOUS
  186.            -------------
  187.  
  188.            Fixed all instances (hopefully) where switching ISAs while in MacsBug wouldn't cause the register
  189.            names to be erased and redrawn. My internal concept of current and previous ISA was a bit loopy.
  190.  
  191.            The syntax error display for all non-repeating commands has been fixed (br, etc.) You'll no longer
  192.            see the entire help text as one garbled mess. Yeah, it confused me too.
  193.  
  194.            The “explain significance of” feature shows nicer output for slightly-negative numbers (0 to -16M).
  195.  
  196.            The display of “is a bad pointer” only yells about odd pointers on 68000s.
  197.  
  198.            Made internal commands override dcmds of the same name. You can specify a dcmd (only) by putting
  199.            a "∂" in front of the name (and it should work for Help, too, as in "?∂cfm").
  200.  
  201.            Allow "≠" for not-equal (Dave did it, I'll never remember it).
  202.             
  203.            Moved the typographical quotes up by one pixel (to make Greg Robbins happy).
  204.  
  205.            BUILT-IN DEBUGGER PREFS
  206.            -----------------------
  207.  
  208.            Fixed Get1xType and Get1xResource to be Get1IndType and Get1IndResource (we've added two macros
  209.            to let you still type Get1xType and Get1xResource if you really want to).
  210.  
  211.            Replaced PPCJump macro with a more general one. PPCJumpA is now the old "branch absolute"
  212.            version.
  213.  
  214. • 6.5.1  - Built 6/2/95 - never released due to serious symbol lookup bug
  215.  
  216.            POWERPC SYMBOL LOOKUP
  217.            ---------------------
  218.            
  219.            The PowerPC symbol lookup mechanism has been reworked so that exported CFM symbols and 
  220.            embedded traceback symbols get along much better. If you have a PowerPC container that
  221.            has both exports and tracebacks, CFM symbols no longer always win, the best (closest) symbol
  222.            of either type will be returned.
  223.            
  224.            When disassembling arbitrary PowerPC code (you know, when you're bored and still at work at
  225.            4:00 am), MacsBug now sniffs through cross-TOC glue code to provide meaningful symbols. So,
  226.            instead of seeing something like this:
  227.            
  228.                       bl        $+0x76F8                  ; 0x00007848 | 480076F9
  229.                       lwz       RTOC,0x0014(SP)                        | 80410014
  230.     
  231.            You'll see something like this:
  232.           
  233.                       bl        NewPtrSysClear            ; 0x00007848 | 480076F9
  234.                       lwz       RTOC,0x0014(SP)                        | 80410014
  235.           
  236.            Currently this works with applications and any import libraries that are pulled in by CFM as part
  237.            of a closure, such as InterfaceLib, MathLib, or DragLib, for example. If you load and prepare 
  238.            a fragment yourself, or use accelerated resources, MacsBug cannot identify the symbols in those
  239.            fragments. However, this may change in the future.
  240.            
  241.            EMBEDDED SYMBOLS
  242.            ----------------
  243.             
  244.            When walking a heap to search for embedded symbols, either by name or address, the code that
  245.            determined whether a heap block should be searched was rather lame. It rejected all non-relocatable
  246.            blocks, but was quite happy to search free blocks. This meant it wasted a lot time looking for
  247.            symbols where you wouldn't have any, and it probably missed others that you did have. One
  248.            place where you'll notice this is when you “HX” to the System heap and use symbols pop-up window.
  249.            You'll probably see lots of new names that have been lurking in non-relocatable blocks.
  250.            
  251.            Please note that if you evaluate a symbol in the System heap (by typing its name on the command-
  252.            line), the time to search can take significantly longer than in previous versions. This is simply
  253.            due to searching more blocks. In future versions the performance will be addressed.
  254.            
  255.            POWERPC EMBEDDED SYMBOLS
  256.            ------------------------
  257.            
  258.            You can now use the names of traceback symbols in expressions just as you have been able to
  259.            with embedded 68K MacsBug names for, well, ever. As with 68K names, only the TargetZone as
  260.            specified with the “HX” command will be searched.
  261.  
  262.            SYMBOLS POP-UP WINDOW
  263.            ---------------------
  264.            
  265.            The utility and size of the symbols pop-up window has been increased. The width is now relative
  266.            to the width of the MacsBug display area, so it's larger. This should provide a bit more room
  267.            for really long unmangled C++ symbols.
  268.            
  269.            MacsBug now locates and displays more types of symbols in the pop-up. It can now find 68K
  270.            embedded symbols, PowerPC traceback embedded symbols, and CFM code exports. Each symbol is now
  271.            classified with a symbol/instruction set designator at the right side of each line displayed.
  272.            The symbol types you should see, as well as their meanings, are as follows:
  273.            
  274.                  68K MBug - Traditional 68K MacsBug embedded symbol
  275.                  PPC TBT  - PowerPC/AIX-style traceback table embedded symbol
  276.                  PPC CFM  - PowerPC Code Fragment Manager exported TVector symbol
  277.  
  278.            POWERPC DEBUGGING
  279.            -----------------
  280.  
  281.            A number of bugs involving PowerPC debugging have been fixed. These are:
  282.            
  283.                 • You can now hit a breakpoint and Go from it. Previously, you had to step once before 
  284.                   allowing execution to continue or you'd crash.
  285.                 • You can now step over a subroutine call such as “bl” when it has a breakpoint set on it.
  286.                 • When stepping over a conditional subroutine call such as “beqlr” when the branch is not
  287.                   going to be taken, MacsBug no longer returns to running your program at full-speed.
  288.                 • Expressions and counts on breakpoints now actually work.
  289.             
  290.            POWERPC EXCEPTION PROCESSING
  291.            ----------------------------
  292.  
  293.            Previous versions of MacsBug would handle more or less every exception that was passed to it.
  294.            In certain situation this is a reasonably unfriendly thing for it to be doing, and can really
  295.            annoy the user. So, in an effort to be nicer to users as well as high-level debuggers, MacsBug
  296.            now only catches exceptions if nobody else chose to do so. This means that all PowerPC unmapped
  297.            memory exceptions that take place within the Modern Memory Manager due to broken applications
  298.            will once again be masked from the user's view.
  299.            
  300.            However, if you would prefer to be notified about every exception, there are two ways you can
  301.            re-enable previous behavior. At runtime, you can use the new “SET AUTOGP” command. When AUTOGP 
  302.            is enabled (the default), all exceptions are automatically forwarded to anyone who wants them.
  303.            When it's off, MacsBug will catch everything that comes its way. If you would like to permanently
  304.            set the behaviour, you can edit the 'mxpr' resource within MacsBug using ResEdit.  By setting the
  305.            “Don't auto propagate PowerPC xcpts” field, you can specify the initial AUTOGP value.
  306.  
  307.            When you're executing PowerPC code and somehow get your PC pointing into unmapped memory, MacsBug
  308.            handles this a bit better. It used to take a 68K bus error in the middle of the PowerPC bus error,
  309.            and it would show the entirely wrong register set. It's not perfect (yet) but at least it will be
  310.            a lot less confusing if this ever happens to you.
  311.  
  312.            HEAP ZONES
  313.            ----------
  314.            
  315.            Throughout MacsBug, application heaps are now called out with the name of their corresponding
  316.            application. Only the heap that an application was launched into is named, any other private
  317.            heaps that an application may have created are not named. Heap names are used in such places
  318.            as the “HX” (Heap Exchange), “HZ” (Heap Zones), “HT” (Heap Total), and “WH” (Where) commands,
  319.            among others.
  320.            
  321.            The “HZ” command has been enhanced to display the size of each heap in K. The values are shown
  322.            on the left side of the display before the heap addresses.
  323.  
  324.            HEAP CHECK COMMAND
  325.            ------------------
  326.             
  327.            The “HC” (Heap Check) command now has an option. Rather than just checking the TargetZone, you
  328.            can now check all heaps simultaneously with the “ALL” option. The set of heaps that is checked
  329.            is that same that are identified with the “HZ” command. If the command detects any of the heaps
  330.            to be corrupt, it will not terminate the overall check, it will continue on with the next heap
  331.            (if any).
  332.  
  333.            HEAP CORRUPTION DETECTION
  334.            -------------------------
  335.            
  336.            Whenever MacsBug walks a heap, either explicitly when you dump a heap, or implicitly when looking
  337.            up a symbol, each heap block is checked for possible corruption. However, due to a bug introduced
  338.            when it was rewritten in C, the three tests performed on each block all had to fail simultaneously
  339.            for a block to be marked as bad. Since two of the three were mutually-exclusive, MacsBug could never
  340.            detect any block as being bad. This strikes us as less than useful, so it's been fixed. Note that
  341.            this code was not part of the “HC” command, which worked fine, it's only a simple test within the
  342.            general heap walker mechanism.
  343.  
  344.            STACK CRAWL
  345.            -----------
  346.            
  347.            MacsBug now can walk A6/R1 Mixed Mode stacks with the “SC” command. Consistent with previous
  348.            behaviour, if it can't find a valid back-chain link, the crawl terminates. A very small number of
  349.            people have reported that the command occasionally never returns keyboard control. This may have
  350.            been due to other problems in embedded symbols lookup (which have been fixed and were noted above),
  351.            but since we could never reproduce the lockup, we're just not sure. If you have any problems with
  352.            this new feature, please let us know about it as soon as possible.
  353.  
  354.            Occasionally, if you and/or your computer got hit with some wiggy particle from space aliens, the
  355.            SC7 command would abort with an “Unable to access that address” message when looking for valid 
  356.            PowerPC return addresses. I got hit with a really gooey particle (knocked me unconscious, too) and 
  357.            was lucky enough to get a reproducible case of this problem, so now it's fixed.
  358.  
  359.            68K DEBUGSTR
  360.            ------------
  361.            
  362.            Due to a Ptr (generally signed char) vs. StringPtr (unsigned char) bug, the string that was passed
  363.            to DebugStr was limited to 127 characters. If the string was longer, nothing would be displayed.
  364.            This is no longer the case; DebugStr strings can now be up to 255 characters long.
  365.  
  366.            When running in 24-bit mode on a 32-bit capable machine, if the pointer to the DebugStr string had
  367.            any bits set in the high byte, MacsBug could bus error when trying to display the string. This has
  368.            been fixed.
  369.  
  370.            A-TRAP BREAKS
  371.            -------------
  372.            
  373.            When VM was on, and you attempted to break on a selector-based trap whose selector value was
  374.            on the stack, we looked on the wrong stack for the value. Obviously, this greatly reduced the
  375.            chances that we'd actually break when you expected it to.
  376.         
  377.            68K DISASSEMBLY
  378.            ---------------
  379.            
  380.            When disassembling a PACK A-Trap, we now display the name of the package in the comment field
  381.            of the disassembly.
  382.             
  383.            MEMORY SETTING AND DISPLAY
  384.            --------------------------
  385.            
  386.            When you use any of the Set Memory commands (“SM”, “SL”, etc.), the underlying processor cache
  387.            is now flushed over the range just set. This means you can now reliably modify code and then
  388.            execute it.
  389.            
  390.            A new basic type has been added to those used in templates. IOREFNUM supports the display of
  391.            the file name associated with a given refNum, as well as the open fork ([data] or [rsrc]). For
  392.            example, if you use the “iopb” template, the output of the ioRefNum field used to look like this:
  393.            
  394.                   008C0E40  ioRefNum           0D98
  395.  
  396.            but now looks like this:
  397.  
  398.                   008C0E40  ioRefNum           0D98 = MacsBug Release [data] 
  399.  
  400.            Changed the “DM” (Display Memory) command so that it uses ditto marks for groups of identical
  401.            lines when dittoing has been enabled with “SET DITTO ON”.
  402.  
  403.            The “DMA” (Display Memory ASCII) command can now accept very large byte counts.
  404.  
  405.            FILE DCMD
  406.            ---------
  407.  
  408.            The short-form display (file 0) now omits the fields which have no use after-the-fact in a
  409.            log file.
  410.  
  411.            LEAKS DCMD
  412.            ----------
  413.            
  414.            The various Memory Manager patches are now installed at dcmdSecondaryInit time so that we
  415.            can detect leaks in PowerPC code (after the native Modern Memory Manager is loaded).
  416.  
  417.            MISCELLANEOUS
  418.            -------------
  419.            
  420.            MacsBug now knows how to hide the hardware cursor on machines that support it, such as the
  421.            PCI boxes.
  422.  
  423.            The value of A7 shown by the “TD” (Total Display) command is now correct when running with VM
  424.            enabled. It used to be the value of the ISP, when it should have been the USP.
  425.  
  426.            When any command reports a syntax error, a message is shown with the proper command syntax.
  427.  
  428.            Added a new SET sub-option, “SUSPENDPROMPT”. This works much like the “SCROLLPROMPT” option,
  429.            but prompting is only disabled until the next line of command input is requested.
  430.  
  431.            BUILT-IN DEBUGGER PREFS
  432.            -----------------------
  433.  
  434.            The standard log macro (StdLog) has been enhanced somewhat. It now uses “HC” with the “ALL”
  435.            option, so it won't abort if a heap is corrupt. The macro now records the value of the long
  436.            at 0x00000000 so you can see if a piece of code was doing bad things.
  437.  
  438.            Changed some templates to use the new basic type IORefNum, where appropriate.
  439.  
  440.            Disk Init (PACK 2) actually takes its selector on the stack, not in D0. The glue moves it
  441.            through D0, which seems kind of lame, if you ask me (this means we won't disassemble this
  442.            without some special-case code which has yet to be written).
  443.  
  444.            Added selectors for SpeechRecognitionDispatch, PowerMgrDispatch selectors $22..$28, and
  445.            ControlStripDispatch selectors new with Control Strip 1.2.
  446.  
  447. • 6.5d12 - Released 4/13/95
  448.  
  449.            HEAP SCRAMBLING
  450.            ---------------
  451.            
  452.            When we move a block of data around, we can't tell if it contains executable code, so the
  453.            processor caches should have been flushed on the destination range. In the past, when
  454.            the entire cache was flushed very often, this wasn't a problem. With the cache flushing
  455.            changes in 6.5d10, heap scrambling became very much unreliable. This has been fixed.
  456.  
  457.            POWERPC EMBEDDED SYMBOLS
  458.            ------------------------
  459.            
  460.            We now support looking up PowerPC embedded symbols from traceback tables. If you're using the
  461.            newest Metrowerks 1.2.1 C/C++ compilers you can take advantage of this. The only other compiler
  462.            I know that currently supports traceback tables is xlc for the RS/6000. With the current
  463.            implementation, typing a symbol name will not evaluate to the address of that routine. The
  464.            traceback symbols are currently only used within a disassembly of PowerPC code.
  465.            
  466.            CFM SYMBOL LOOKUP
  467.            -----------------
  468.            
  469.            When you're stepping through a fragment of PowerPC code that doesn't contain any exported
  470.            CFM symbols (a simple application comes to mind), the delay between steps has been drastically
  471.            reduced. This was done by removing a very large number of Mixed Mode switches on each line of
  472.            disassembly, as well as fixing a logic bug that caused us to exhaustively look for 68K symbols
  473.            when there couldn't possibly be any.
  474.  
  475.            WH COMMAND
  476.            ----------
  477.  
  478.            When displaying an address that is in VM file-mapped space, MacsBug now shows what CFM library
  479.            the address resides within.
  480.  
  481.            STACK CRAWL
  482.            -----------
  483.            
  484.            MacsBug now understands Mixed Mode stacks when using the "SC7" command, and will show you
  485.            the instruction set of each caller. This command now works correctly from either PowerPC
  486.            or 68K code. For this release the "SC6" command works exactly as it did in 6.5d11 due to a
  487.            last-minute problem (infinite recursion sucks). It will fully understand Mixed Mode stacks
  488.            in the next release.
  489.  
  490.            POWERPC DEBUGGING
  491.            -----------------
  492.            
  493.                    • When stepping up to a flow of control instruction, MacsBug displays a message which
  494.                   indicates if the branch will or will not be taken. In previous versions this was
  495.                   frequently wrong due to a sign-extension bug in the compiler, which we've worked around.
  496.                 • You can now disable PowerPC Debugger and DebugStr calls with the “DX” command.
  497.                 • The “TF” (Total Floating Point display) command now works when in PowerPC code, and will
  498.                   show the entire PowerPC native FPU register set. You can now use “FPR0” through “FPR31”
  499.                   in expressions, although this is totally useless since MacsBug's expression evaluation
  500.                   is centered around 32-bit values, and FPRs are 64-bit.
  501.                 • When displaying the PowerPC register set via “TD”, we now know about the 603e, and display
  502.                   a reasonable message for future processors.
  503.                 • When debugging PowerPC code at boot time, we no longer display the name of the currently
  504.                   loading extension after each and every step or trace. My, that was annoying.
  505.  
  506.            There are a few problems with native debugging that you should be aware of. They are:
  507.            
  508.                    • If you're stopped on a native breakpoint, you currently can't Go, you need to Step once
  509.                   and then Go.
  510.                 • As above, if you're sitting at a branch to subroutine instruction that has a breakpoint
  511.                   located at it, you cannot Step Over the subroutine call without first removing the
  512.                   breakpoint.
  513.                 • If you use the single-machine Macintosh Debugger, or the Metrowerks Debugger which
  514.                   require the PowerMac Debug Services background application, you shouldn't place the
  515.                   app in the Startup Items folder. The app has a feature such that if it can't
  516.                   communicate with a host debugger, it will DebugStr into 68K code when it sees a
  517.                   native exception (breakpoint, trace, etc.). MacsBug will not get a chance to handle
  518.                   any native exceptions. If you do use a high-level debugger in cooperation with
  519.                   MacsBug, you should place the background application in the same folder as your
  520.                   debugger so it gets launched when you start up the debugger.
  521.  
  522.            RB AND RS
  523.            ---------
  524.            These commands no longer reboot if there are extra parameters on the command line. The 
  525.            motivation here is that Dave recently typed "rb -s" when he meant to type "rd -s", and
  526.            he really, really didn't mean to reboot his system at that particular time.
  527.  
  528.            DCMD COMMAND
  529.            ------------
  530.            
  531.            We've added a new command which displays a compact list of all installed dcmds. This list
  532.            includes the dcmd name and syntax, as well as the version if the dcmd is format 3 or later.
  533.            The command can accept a optional prefix string to limit the display to a subset of all dcmds.
  534.  
  535.            RD DCMD
  536.            -------
  537.            
  538.            We've added a new option, "-h" which will show information on a resource given its handle.
  539.            Very, very useful. When looking up resources by type, the "-t" option is now optional, so
  540.            you can now type something like “RD 'STR '”.
  541.  
  542.            GESTALT DCMD
  543.            ------------
  544.            
  545.            A number of new selectors were added to the list of those that are recognized.
  546.  
  547.            THING DCMD
  548.            ----------
  549.            
  550.            The Thing dcmd is now a part of the standard MacsBug distribution. This dcmd displays
  551.            information on Components.
  552.            
  553.            JUMPTABLE DCMD
  554.            --------------
  555.  
  556.            Fixed a stack imbalance problem that would cause MacsBug to exit when the dcmd was done
  557.            executing. Why this had that sort of behavior and didn't crash is extremely odd.
  558.            
  559.            EXPRESSION EVALUATION
  560.            ---------------------
  561.  
  562.            In the past there was no way to use the name of a trap in an expression and have it evaluate
  563.            to the trap's number. Using the syntax “††<trapname>” now provides for this. For example, if
  564.            you want to see what selector $18 off of trap HFSDispatch is, but you don't know the trap
  565.            number, this expression will do the trick:
  566.            
  567.                    dh 7018 ††HFSDispatch
  568.                 
  569.            Of course, in this example you had to know that 7018 was MOVEQ #$18, D0 (everyone does, right?).
  570.            
  571.            With the addition of ROM map and Code Fragment Manager symbols in recent releases, the potential
  572.            for confusion about exactly what symbol will be found if a name collision occurs has increased.
  573.            If you know that a symbol you're trying to look up is ROM map-based, you've been able to prefix
  574.            the symbol with the Option-R ('®') character. Now you can do a similar lookup order force for CFM.
  575.            If your symbol string is prefixed with Option-G ('©'), it will be searched for first in the CFM
  576.            name space. Since Option-G looks reasonable when displayed ('C' == CFM), but is a pain to remember,
  577.            Option-C now maps to Option-G (try it, they're identical as far as MacsBug is concerned).
  578.            
  579.            We've added a really cool new feature we call “explain significance of”. During simple expression
  580.            evaluation, we now show the magnitude of the resultant value in more human intelligible terms. In
  581.            our daily trials debugging the System Software, we're quite often surprised at how many people can't
  582.            look at a hex value and realize, “Oh, that's past the end of your logical RAM - that's why you died”.
  583.            With this feature we hope for a greater awareness of the general magnitude of things. For example,
  584.            typing the value $120C60 yields:
  585.            
  586.                 120C60 = $00120C60  #1182816  #1182816 '••`' (between 1M and 2M)
  587.                 
  588.            For values that contain lots of trailing zeros, you'll get to see a new notation we've developed
  589.            for more easily describing a 32-bit value. So that you don't have to call out each individual
  590.            trailing zero (and look silly counting along on your fingers as you talk to your co-workers), we've
  591.            developed the “kabillion” short-hand notation. For values that contain at least 5 trailing (least-
  592.            significant) zeros, the notation will be used. For example, for $40800000, you get:
  593.            
  594.                 40800000 = $40800000  #1082130432  #1082130432  '@A••' (just over 1G; 4 0 8 kabillion)
  595.             
  596.            This is read “four-zero-eight kabillion” or “four-oh-eight kabillion”. Cool, huh?
  597.  
  598.            You can now use the Option-/ character ('÷') as an alias for '/' (division).
  599.            
  600.            MACROS
  601.            ------
  602.            
  603.            Macros can now optionally take parameters. When processing a macro expansion, positional
  604.            parameters ®1 through ®9 represent the remaining whitespace-delimited tokens on the command
  605.            line after the macro name. The parser understands the number of parameters your macro requires
  606.            by noticing the highest-numbered parameter. If you use ®9 as a single parameter, you must have
  607.            eight preceding parameters, which are ignored. These parameters can be quoted with single or
  608.            double quotes, the quotes are not part of the parameter value. For example, the following
  609.            macro takes a single parameter, a resource type. You would invoke this macro with a command
  610.            line such as “gres 'gpch'”.
  611.            
  612.                    "gres", "atb GetResource (sp+2)^='®1'"
  613.  
  614.            A sample parameterized macro is provided within MacsBug which will break on all 68K calls to
  615.            GetResource, Get1Resource, and Get1xResource for a given type. This macro is named “RType”
  616.            and is invoked as in the example above.
  617.  
  618.            When displaying macros with the “MCD” command, and the macro expansion needed two or more
  619.            lines to be fully displayed, the text really should have wrapped instead of disappearing into
  620.            the bit-bucket off the right side of the screen. Therefore, we now wrap the text appropriately.
  621.            If you terminate this command before it finishes, you'll now get control back a lot faster.
  622.  
  623.            Since the evaluation of trap numbers in expressions has changed, if you want to find the 
  624.            trap name given a number but don't want to have to type “WH ††Axyz”, we've added a simple macro.
  625.            The macro “WHT” shows the name and implementation address of a trap given a trap name or number.
  626.  
  627.            TEMPLATES
  628.            ---------
  629.            
  630.            An extremely popular bug in template display has been fixed. When showing a region of memory
  631.            with a template that contained a pointer field, and that field was filled was a garbage bus-
  632.            error value, we'd quit showing the template when we reached that field. For example, doing
  633.            “dm a0 iopb” with an ioNamePtr field pointing off into unmapped space no longer terminates
  634.            the template display.
  635.  
  636.            MODERN MEMORY MANAGER HEAP STUFF
  637.            --------------------------------
  638.             
  639.            When identifying whether a heap is the Process Manager heap, we now only do this if the
  640.            Process Manager is around (ie. it's after boot time).
  641.  
  642.            DISASSEMBLY
  643.            -----------
  644.            
  645.            When displaying the offset into a procedure, we now show 5 nibbles for the offset instead of 4.
  646.  
  647.            MISCELLANEOUS
  648.            -------------
  649.            
  650.            If you've invoked a command that displays a lot of output, and tire of having to press Return
  651.            or Space to display another page, you can now temporarily turn off these prompts. Using Command-
  652.            Return or Command-Space at the prompt skips the remaining prompts this command would have generated.
  653.            You can still abort the command by pressing any key, you just won't be asked about it a bunch of
  654.            times. When the command terminates, the prompts will be re-enabled for the next command (unless
  655.            you've used the SET SCROLLPROMPT OFF to globally disable the feature).
  656.  
  657.            When we switch instruction set displays, we should now properly clean up all extra pixels in
  658.            the register subdisplay.
  659.  
  660.            When you execute a command with too many parameters, MacsBug now displays a much more useful
  661.            message, as well as actually showing you what parameters weren't needed.
  662.  
  663.            Command-G, -S, and -T now only work if the command line is empty.
  664.  
  665.            The TestDcmd application will now load format 3 dcmds, but doesn't do anything special to support
  666.            them.
  667.  
  668.            The PlayMem general-purpose buffer is now always 4-byte aligned.
  669.  
  670.            BUILT-IN DEBUGGER PREFS
  671.            -----------------------
  672.  
  673.            We've added templates for the various SCSI Manager 4.3 API parameter blocks.
  674.  
  675.  
  676. • 6.5d11 - Released 2/27/95
  677.  
  678.            POWERPC DEBUGGING
  679.            -----------------
  680.            
  681.            The support for PowerPC debugging has been greatly improved from that in 6.5d10, and
  682.            is now much more like debugging 68K code. The following enhancements have been made:
  683.            
  684.                 • MacsBug no longer handles all PowerPC trap or trace exceptions that are executed,
  685.                   it only catches those that it specifically caused, or the special Debugger/DebugStr 
  686.                   trap. This fixes the popular incompatibility with the single-machine Power Mac
  687.                   Debug Services application.
  688.                 • The Debugger and DebugStr native traps are handled properly so that you won't
  689.                   repeatedly hit the trap instruction. You can now step up to and over these
  690.                   traps. Previously you had to manually set the PC past the trap to continue.
  691.                   DebugStr now shows the passed in string just like the 68K _DebugStr.
  692.                    • You can now trace over subroutine calls such as ‘bl’.
  693.                 • When you step up to a flow-of-control instruction, we now say whether the branch
  694.                   will be taken or not.
  695.                 • The PowerPC disassembler is now POWER-clean, and a lot smaller.
  696.                 • When disassembling PowerPC code that includes CFM exports, you'll no longer see
  697.                   the name of each procedure twice in succession.
  698.                 • Setting breakpoints should now be much more reliable. We now flush the appropriate
  699.                   PowerPC hardware cache lines when inserting and removing breakpoints. We used to
  700.                   be really stupid and flush the 68K cache, which didn't do anything useful.
  701.                 • We can now handle all native exceptions with VM enabled (we used to crash in a
  702.                   most spectacular way).
  703.                 • You can now set breakpoints in code that is file-mapped.
  704.  
  705.            PROCEDURE NAME DISPLAY
  706.            ----------------------
  707.            
  708.            When deciding if we should redisplay the name of the current procedure at the top
  709.            line of the PC window area, we used to fail if the PC was located at 2 GB or above
  710.            ($7FFFFFFF+). The thing you'd most-likely notice about this problem was the “Will
  711.            branch/not branch” message would be drawn on top of the hex target branch address
  712.            when stepping.
  713.  
  714.            MODERN MEMORY MANAGER HEAP STUFF
  715.            --------------------------------
  716.            
  717.            Previous versions of MacsBug were confused by the format of the Process Manager
  718.            heap. If you'd “hx” to the heap, and then dump all relocatable and non-relocatable
  719.            blocks, it thought they were all corrupt.
  720.            
  721.            When displaying the names of known heaps (System, Application, etc.), we now name
  722.            the ROM read-only zone and the Process Manager heap. One place you'll see this is
  723.            when you execute the “hz” command.
  724.             
  725.            BREAKPOINTS
  726.            -----------
  727.  
  728.            Due to the above heap problem, trying to set a breakpoint in a block that lived
  729.            in the Process Manager heap was a hit or miss proposition, and sometimes you'd
  730.            even get a bus error. Since MacsBug is no longer confused about the heap format,
  731.            breakpoints there should now work reliably.
  732.  
  733.            A-TRAP TRACING
  734.            --------------
  735.  
  736.            The A-Trap trace mechanism has been enhanced to allow selective filtering of trap
  737.            calls that get made at certain interrupt levels. When you're trying to find out why
  738.            a piece of code crashed and you want to see the calling path, you can now see calls
  739.            that are made with all interrupts enabled, for example. This can help filter out
  740.            lots of noise and get you closer to the problem faster.
  741.            
  742.            When displaying each trap trace, the interrupt level at which the call was made is
  743.            now shown.
  744.  
  745.            STACK CRAWL
  746.            -----------
  747.            
  748.            No, I didn't do mixed-mode crawls yet. They'll be in the next release. I promise. What
  749.            I did do is make the “SC7” command work when you're in PowerPC code (it does a crawl
  750.            based on register r1). It does the job just as poorly as when in 68K code, but it's
  751.            still somewhat useful.
  752.  
  753.            CFM SYMBOL LOOKUP
  754.            -----------------
  755.            
  756.            We've sped up the process of lookup up CFM symbols quite a bit. The code that does
  757.            this used to be 68K, so we'd take a mixed-mode switch on each symbol that we iterated
  758.            over. The code is now native so we now take one switch on each lookup set, which is
  759.            a tremendous reduction. You'll most notice this when you evaluate the name of a CFM
  760.            symbol, such as “__NewPtr”. Native disassemblies may be a bit less jerky as well.
  761.            
  762.            ROM INFO SYMBOL FILES
  763.            ---------------------
  764.            
  765.            When I introduced ROM symbol files in 6.5d10, I neglected to mention exactly where
  766.            your ROMInfo/ROM map file should be placed. No matter what kind of file you're using,
  767.            it must be located at the root level of your System folder.
  768.  
  769.            When loading ROMInfo files that contain unparseable text, the state machine used to
  770.            identify the problem, but never did anything about it. It would then get stuck in
  771.            a loop, and eventually would bus error. The error handling code has been improved
  772.            quite a bit, and MacsBug now tells you near what character it ran into parse problems.
  773.            Any symbols that were read up to that point will have been recorded properly. In the
  774.            future, MacsBug will continue parsing until the end of the source file, in case there
  775.            are more symbols after the point that it errored.
  776.  
  777.            FILL COMMAND
  778.            ------------
  779.            
  780.            We've added a new command, “FILL”, that allows you to fill large (or small) ranges 
  781.            of memory with a repeating long value. The range must be long-aligned and the count
  782.            must be a multiple of four bytes.
  783.  
  784.            FILE DCMD
  785.            ---------
  786.  
  787.            This dcmd now has a shorter display mode which skips showing all open font files.
  788.            To use this shortened format, invoke the dcmd with a file reference number of zero
  789.            (this is always a bad file reference number to the OS). The display looks much the
  790.            same, except font files are ignored and a count of the number that was skipped is
  791.            shown at the end of the list.
  792.  
  793.            RD DCMD
  794.            -------
  795.  
  796.            The RD dcmd also has a short-format display which ignores all open font files.
  797.            To use this new feature, invoke the dcmd with the new “-s” option.
  798.            
  799.            When listing all maps in the current chain with either -s or -c, the output has been
  800.            made to align a bit better, and we've added a new field. For each open file, we now
  801.            show the map flags field right after the map handle.
  802.  
  803.            For any resource map that is overriding the System file (such as the active enabler),
  804.            you'll now see a “+” in the leftmost column.
  805.            
  806.            For any resource that has been purged, we draw a “*” symbol to the right of the
  807.            handle address.
  808.            
  809.            GESTALT DCMD
  810.            ------------
  811.  
  812.            We now skip the 'eajt' selector (Easy Access), because the first time you look it up,
  813.            Easy Access tries to open a resource file to find the value, which hangs us. Hopefully
  814.            we'll have a more general solution for this in the future.
  815.            
  816.            DCMD.H
  817.            ------
  818.            
  819.            The dcmd.h header file which is used to build dcmds in C now requires you to build with
  820.            at least the 2.0a3 Universal Headers because ExceptionInformation has been changed to
  821.            ExceptionInformationPowerPC.
  822.  
  823.            BUILT-IN MACROS
  824.            ---------------
  825.  
  826.            The “StdLog” macro has been changed to use the shorter display options of the File and
  827.            RD dcmds. This leaves out mostly-useless information (open font files), and shortens
  828.            the bug log so that the chances are greater that it will fit in a bug report. The
  829.            display of the stack crawl has been moved to the end of the macro so that if we're on a
  830.            bad stack we'll get everything else logged before the stack crawl fails.
  831.            
  832.            There's a new macro named “ropen” which sets A-Trap breaks on all traps that open
  833.            resource files. When a trap hits, the name of the file that was being opened is shown.
  834.            This macro is really useful when you're tracing the system boot process, or debugging
  835.            a 3rd-party application and would like to know what files get opened.
  836.  
  837.            MACSBUG'S SELF CHECKSUM
  838.            -----------------------
  839.  
  840.            In an effort to let you know when code has stomped upon MacsBug, it maintains a checksum
  841.            of its code space. Each time you enter MacsBug this checksum is re-evaluated and compared
  842.            to the original. If they differ, you will be alerted. However, due to some build changes
  843.            way back in 1993, approximately 17K of the most critical part of MacsBug was being left
  844.            out. This has been fixed.
  845.            
  846.            MISCELLANEOUS
  847.            -------------
  848.            
  849.            When you use the “WH” (“Where”) command to classify an address, MacsBug now does a better
  850.            job telling you if the address is in not in RAM or ROM.
  851.            
  852.            Fixed the 8-bit low-level character blitter to not trash register A2. I said I did
  853.            this in 6.5d9, but it was actually trashing it in two different places. This could
  854.            cause problems with dcmds that use the drawing callbacks and expect A2 to be properly
  855.            preserved.
  856.            
  857.            Made MacsBug work on the Mac Plus, SE, Portable and PowerBook 100 again. Our ROM family
  858.            check was changed in 6.5d10 to better work a future OS, and it broke really old machines
  859.            by making us think they were Mac II-class with Color QuickDraw. I don't think so.
  860.  
  861.            Fixed the Log command so that it fails if you don't specify a file name when using the
  862.            “-h” option.
  863.  
  864.            Fixed ATSS to make the “addr” parameter required. It was never optional, but the command
  865.            handler never enforced it.
  866.  
  867.            Corrected some mistakes in the 6.5d10 release notes. Please see change bars (“|” in the
  868.            leftmost column) for deltas.
  869.  
  870.            BUILT-IN DEBUGGER PREFS
  871.            -----------------------
  872.  
  873.            Changes were made to various resources within the default debugger prefs which
  874.            is part of the MacsBug file itself. They include:
  875.  
  876.                 • Trap AA54 has a name, so it's now listed as TextServicesDispatch.
  877.  
  878.  
  879. • 6.5d10 - Released 12/16/94
  880.  
  881.            MULTIPLE DEBUGGER PREFS FILES
  882.            -----------------------------
  883.  
  884.            We now support up to 32 debugger preferences files that can be named whatever you wish.
  885.            MacsBug looks in a folder named “MacsBug Preferences” which must be located in the root
  886.            of the System folder (in the future it may support the Preferences folder if there is a
  887.            call for it). Selector trap names, macros, templates, and dcmds can be located in these
  888.            files. Resources of type 'mxpr' (MacsBug prefs), 'mxbi' (MacsBug init), and 'mxbc'
  889.            (MacsBug colors) must still be located in your "Debugger Prefs" file, which cannot be
  890.            located in this new folder. If you place more than 32 files in this folder, MacsBug will
  891.            only load resources from the first 32 and will warn you about this.
  892.         
  893.            BUILT-IN DEBUGGER PREFS
  894.            -----------------------
  895.  
  896.            Changes were made to various resources within the default debugger prefs which
  897.            is part of the MacsBug file itself. It includes:
  898.  
  899.                    • Added some missing selectors off of ScriptUtil and SoundDispatch
  900.                    • Fixed the AUXDispatch selector length so we actually disassemble these
  901.                 • Made the Gestalt dcmd part of the standard build
  902.                 • Added a template for the dcmdParmBlock (describes format 3 parm block)
  903.  
  904.            PERFORMANCE SPEEDUPS
  905.            --------------------
  906.          
  907.            MacsBug no longer flushes the entire processor cache(s) when entering and exiting. Any
  908.            time we have need to maintain cache coherency (such as when we set a breakpoint in RAM),
  909.            we do a local flush of the page(s) that contain the target addresses. With this change
  910.            and the accidental flush bug fix described below, MacsBug should no longer be causing
  911.            cache-related bugs to disappear when stepping, tracing, or handling A-trap actions. This
  912.            should also contribute to an overall speedier feel on '040 CPUs.
  913.  
  914.            I fixed a really nasty typo in the procedure that sets MacsBug's A5 world as current.
  915.            Someone rewrote it a while back (1991) and left the old code commented out in
  916.            place. However, they commented out the procedure's RTS instruction as well. Unluckily,
  917.            the code that we fell into was MacsBug's internal FlushCache routine which took no
  918.            parameters, so we didn't crash (which would have forced someone to notice this
  919.            a long time ago). By making this routine not fall into the flush code we've sped
  920.            up a bunch of things to the point of being much less annoying to use. Things that
  921.            are affected, in order of most visible to least:
  922.  
  923.                 • Any time we use trace exceptions to enter (most-noticeable for Step Spy)
  924.                     
  925.                     To show myself how much faster this now is, I did some timings when
  926.                     booting my main MacsBug machine, a PowerBook Duo 280c. The results are
  927.                     quite impressive and show over a 5X speedup for this particular case.
  928.                     The test was to Step Spy a longword-aligned long location (this is handled
  929.                     as a fast special-case inside MacsBug) which would not change. Timings are
  930.                     in seconds from the time the first 'INIT' resource in the first extension
  931.                     was to be loaded to the time that the Process Manager is first executed.
  932.                     
  933.                     16s  - Normal boot with MacsBug 6.5d10 installed but not activated in any way.
  934.                     71s  - Step Spy enabled on 0x00000924 with MacsBug 6.5d10 (without flush bug).
  935.                     376s - Step Spy enabled on 0x00000924 with MacsBug 6.5d9 (with flush bug).
  936.                 
  937.                 • When any A-Trap action of any sort (ATT, ATR, ATB, etc.) is pending
  938.                 • When we handle any PowerPC exception (includes stepping and tracing)
  939.                 • Within our SetTrapAddress skank-o-matic patch
  940.                 • Dcmds that walk the heap via the callback no longer flush on each block walked
  941.                 • Any callback a dcmd makes
  942.                 • Any time a dcmd is called to perform any action
  943.                 • Entering MacsBug via an NMI or any user-visible exception
  944.                 • When we handle a bus error (visible to user) while in MacsBug
  945.                 • When we do an ES or EA
  946.                 
  947.            MacsBug is a bit faster when swapping or scrolling the screen on PowerPC machines.
  948.            We used to use BlockMove to do this, but internally it uses the 'dcbz' instruction
  949.            which causes an alignment exception when writing to non-cacheable space (like the
  950.            screen). We now use a function that is functionally equivalent to BlockMove, but that
  951.            does not use 'dcbz'.
  952.  
  953.            ROM MAP/ROM INFO SYMBOL FILES
  954.            -----------------------------
  955.            
  956.            We now support ROM map (old style) and ROMInfo (new-style) symbol files. Thanks to
  957.            Cameron Esfahani for this way cool code (You da' man!). This means that during disassembly
  958.            of ROM code you will see symbols for internal ROM routines, rather than just trap names.
  959.            If in any expression a local symbol in your code collides with a ROM symbol, but you want
  960.            to force the evaluation to match the ROM first, prefix the symbol name with the '®'
  961.            (option-R) character.
  962.  
  963.            MacsBug currently looks for files of specific names for each machine. The name is chosen
  964.            from the Gestalt 'mach' selector for the current machine. If a file name for your machine
  965.            isn't found in MacsBug’s list, it tries to load a file named “ROMMap”. The list of
  966.            supported files and the corresponding machine ID is:
  967.  
  968.                 "MacPlusROM.map",                    //    4
  969.                 "MacSEROM.map",                        //    5
  970.                 "MacIIROM.map",                        //    6
  971.                 "MacIIxROM.map",                    //    7
  972.                 "MacIIcxROM.map",                    //    8
  973.                 "MacSE030ROM.map",                    //    9
  974.                 "MacPortableROM.map",                //    10
  975.                 "MacIIciROM.map",                    //    11
  976.                 "MacIIfxROM.map",                    //    13
  977.                 "MacClassicROM.map",                //    17
  978.                 "MacIIsiROM.map",                    //    18
  979.                 "MacLCROM.map",                        //    19
  980.                 "MacQuadra900ROM.map",                //    20
  981.                 "MacPowerBook170ROM.map",            //    21
  982.                 "MacQuadra700ROM.map",                //    22
  983.                 "MacClassicIIROM.map",                //    23
  984.                 "MacPowerBook100ROM.map",            //    24
  985.                 "MacPowerBook140ROM.map",            //    25
  986.                 "MacQuadra950ROM.map",                //    26
  987.                 "MacLCIIIROM.map",                    //    27
  988.                 "MacPowerBookDuo210ROM.map",        //    29
  989.                 "MacCentris650ROM.map",                //    30
  990.                 "MacPowerBookDuo230ROM.map",        //    32
  991.                 "MacPowerBook180ROM.map",            //    33
  992.                 "MacPowerBook160ROM.map",            //    34
  993.                 "MacQuadra800ROM.map",                //    35
  994.                 "MacQuadra650ROM.map",                //    36
  995.                 "MacLCIIROM.map",                    //    37
  996.                 "MacPowerBookDuo250ROM.map",        //    38
  997.                 "MacIIViROM.map",                    //    44
  998.                 "MacPerforma600ROM.map",            //    45
  999.                 "MacIIVxROM.map",                    //    48
  1000.                 "MacColorClassicROM.map",            //    49
  1001.                 "MacPowerBook165cROM.map",            //    50
  1002.                 "MacCentris610ROM.map",                //    52
  1003.                 "MacQuadra610ROM.map",                //    53
  1004.                 "MacPowerBook145ROM.map",            //    54
  1005.                 "MacLC520ROM.map",                    //    56
  1006.                 "MacQuadra660AVROM.map",            //    60
  1007.                 "MacPerforma46xROM.map",            //    62
  1008.                 "MacPowerBook180cROM.map",            //    71
  1009.                 "MacPowerBookDuo270cROM.map",        //    77
  1010.                 "MacQuadra840AVROM.map",            //    78
  1011.                 "MacPerforma550ROM.map",            //    80
  1012.                 "MacPowerBook165ROM.map",            //    84
  1013.                 "MacLC475ROM.map",                    //    89
  1014.                 "MacQuadra605ROM.map",                //    94
  1015.                 "MacPowerBookDuo280ROM.map",        //    102
  1016.                 "MacPowerBookDuo280cROM.map"        //    103
  1017.  
  1018.            If, using the two above tries, MacsBug fails to load any map file, it tries to load the
  1019.            new-style “ROMInfo” file. For this style of file there presently is no machine name to
  1020.            machine ID mapping, since there is no officially maintained ROMInfo file collection as
  1021.            there is with the ROM map files (they are packaged with MPW on the E.T.O. developer CDs).
  1022.  
  1023.            DCMD CHANGES
  1024.            ------------
  1025.  
  1026.            We now support a new style of dcmd, format 3. Most of the changes are designed to make it
  1027.            easier to add functionality to the dcmd callback and action interfaces in the future.
  1028.            Format 3 dcmds will not load on versions of MacsBug prior to 6.5d10.
  1029.            
  1030.            To build a format 3 dcmd, the BuildDcmd tool has been enhanced to take a format specifier
  1031.            option. If the '-format3' option is passed, the tool generates the new style dcmd. If no
  1032.            option is specified, the older style format 2 dcmd is generated. The only physical
  1033.            difference in the two formats is the embedded version word. All other differences are in
  1034.            the programming model MacsBug provides, and the requirements MacsBug makes on the dcmd.
  1035.  
  1036.            New dcmds are required to ignore action requests that they do not handle or recognize.
  1037.            This means that they must not display any sort of error if given an undefined action
  1038.            (no beeping!).
  1039.            
  1040.            The DcmdParmBlk structure has been extended with the MacsBug version, maximum supported
  1041.            callback number, current ISA, PowerPC exception structure pointer, and general-purpose
  1042.            I/O buffer pointer.
  1043.            
  1044.            The 68K RegisterPtr and PowerPC exception structures will only be valid if the respective
  1045.              pointers are non-nil. At present the structures will only be valid when the corresponding
  1046.              ISA is the current ISA. For example, if the current ISA is kM68KISA, then the 68K register
  1047.              set will be valid and the PowerPC information will not be valid. This may change in the
  1048.              future such that both register sets may be valid at the same time, so check for non-nilness
  1049.            rather than the associated ISA.
  1050.  
  1051.            Added a new action code, dcmdGetInfo, which returns dcmd version, usage string, and
  1052.            credits string. For format 3 dcmds this means that when given the dcmdHelp message, a
  1053.            dcmd should only draw the body of the text and no headers or usage information. MacsBug
  1054.            uses a combination of the dcmdGetInfo and dcmdHelp messages to display a more uniform
  1055.            help and usage.
  1056.             
  1057.            Added a new action call dcmdSecondaryInit which is called at a time when all System
  1058.            patches have been loaded (including native code on PowerPC), but is immediately before
  1059.            extension/INIT loading. This may only be guaranteed with 7.1, (7.1.1), 7.1.2, and 7.5.
  1060.            This is a good time to apply persistent global toolbox patches or record various state
  1061.            information before extensions or the Process Manager have a chance to muck things up.
  1062.  
  1063.            Added a new action call, dcmdShutdown, which is presently not used. It'll be more defined
  1064.            in a future release.
  1065.  
  1066.            POWERPC DEBUGGING
  1067.            -----------------
  1068.            
  1069.            WARNING: The native disassembler included in this version is not POWER clean. It will
  1070.                        execute illegal PowerPC instructions when disassembling a variety of opcodes
  1071.                     on a 603 or 604 machine. This will be resolved by the next build.
  1072.            
  1073.            PowerPC debugging is enabled for the first time. With this build the support is
  1074.            quite rudimentary, however. A few new commands were added to support the PowerPC
  1075.            feature set. They are:
  1076.  
  1077.            ILP - Disassembles PowerPC instructions from a given address.
  1078.            IPP - Disassembles a half-page of PowerPC instructions centered on the given address.
  1079.            IDP - Disassembles 1 line of PowerPC instructions.
  1080.            DHP - Disassembles a sequence of 32-bit expressions as PowerPC instructions.
  1081.            GP  - Propagates the PowerPC exception we last handled to the next exception handler
  1082.                     registered with the system.
  1083.            BRP - Sets a breakpoint in PowerPC code (does not currently support breakpoints in ROM).
  1084.  
  1085.            The behavior of some commands have been enhanced to support PowerPC debugging. The
  1086.            changes that have been made thus far are:
  1087.  
  1088.            TD  - When in PowerPC code, this displays the entire PowerPC register set.
  1089.            IL  - When the current ISA is PowerPC, typing IL without an address (which implies the
  1090.                     current PC), MacsBug will automatically disassemble the code as PowerPC.
  1091.            IP  - When the current ISA is PowerPC, typing IP without an address (which implies the
  1092.                     current PC), MacsBug will automatically disassemble the code as PowerPC.
  1093.            WH  - If the address being examined is located within a CFM container, MacsBug will
  1094.                  display the name of the fragment, along with the nearest exported symbol.
  1095.  
  1096.            MacsBug now understands all native PowerPC exception types when they occur, and will
  1097.            activate with the display formatted for debugging PowerPC code. For example, if native
  1098.            code causes a bus error, MacsBug will gain control and break into the code at the
  1099.            address of the faulting code, just like it does for 68K code. From there you can step,
  1100.            display and change registers, use dcmds, etc. Be aware that stepping and tracing in this
  1101.            release is extremely limited. You can only step one instruction at a time, and cannot
  1102.            step over any branch instructions (you'll always step into the branch call). Full PowerPC
  1103.            debugging will be available in a future release.
  1104.  
  1105. |           There currently isn't any way to step over Mixed Mode transitions from one ISA to another -
  1106.            you'll need to set a breakpoint on the other side of the transition and go until it is
  1107. |           hit. In the future MacsBug will be intelligent about this, and debugging the two instruction
  1108.            sets will be seamless.
  1109.            
  1110.            SYMBOL LOOKUP
  1111.            -------------
  1112.  
  1113.            We now use the Code Fragment Manager to look up symbols when running on PowerPC machines.
  1114.            Many commands benefit from this, including but not limited to WH, DM, ILP, and DHP.
  1115.  
  1116.            SELECTOR-BASED TRAP NAMES
  1117.            -------------------------
  1118.  
  1119.            The ATP command now displays actual selector names of calls that were made, as well as
  1120. |           the parent trap. The parent trap name is shown in parenthesis.
  1121.  
  1122.            LOGGING
  1123.            -------
  1124.  
  1125.            Log files are now created by default on the root of the boot volume. The Log command now
  1126.            has a parameter, '-h'. This allows you to save your scrollback history from the beginning
  1127.            to the bottom of the current screen (if you've scrolled up into the history when you
  1128.            execute this, all lines off of the bottom of the screen will be lost, as with any other
  1129.            command). Thanks to Hoon Im for taking some time out to add these cool features way back
  1130.            for 6.5d9, but we forgot to tell you about them.
  1131.  
  1132. |           Note that the log file will remain open. You must execute the “log” command with no parameters
  1133. |           to close the file.
  1134.  
  1135.            RESTART/REBOOT COMMANDS
  1136.            -----------------------
  1137.  
  1138.            RS and RB commands should now work on the Mac Plus, and more importantly, they should once
  1139.            again work on all future machines. Both of these commands now use the Shutdown Manager
  1140.            (ShutDwnStart) if it is deemed necessary. However, they will not run any items that have
  1141.            been queued with ShutDwnInstall on the premise that your machine is probably already hosed
  1142.            and running a high-level shutdown proc probably wouldn't be a good idea at this point.
  1143.            
  1144.            PCI BUS DISPLAY SUPPORT
  1145.            -----------------------
  1146.            
  1147.            The video initialization and control code was rewritten to support the new PCI machines.
  1148.            Since these machines no longer have NuBus-style declaration ROMs, we now use new video
  1149.            driver calls to obtain information we previously used the Slot Manager for (getting base
  1150.            addresses, bit depths, etc.). If the new calls fail (as they will on non-PCI machines at
  1151.            present), we drop back to using the Slot Manager.
  1152.  
  1153.            MEMORY USAGE AND ERROR REPORTING
  1154.            --------------------------------
  1155.  
  1156.            Throughout MacsBug's initialization code, we now follow the boot code rules in regards to
  1157.            how much memory can be allocated from BufPtr. If we cannot at least get our stack and
  1158.            video buffer, we will refuse to load. If we can't load other non critical resources and
  1159.            preferences, we'll load, but we'll show a message indicating a memory allocation problem
  1160.            when you first enter the debugger.
  1161.            
  1162.            If MacsBug refuses to load, for whatever reason, it will display an error message
  1163.            in place of the “Debugger loaded” message on the “Welcome to Macintosh” startup
  1164.            screen.
  1165.  
  1166.            MacsBug's internal stack is now always 10K in size, which is up from 4K. This was added
  1167.            to stop some stack overflows we were seeing with the new PowerPC features. However, this
  1168.            will benefit dcmds as well since they normally use MacsBug's stack.
  1169.  
  1170.            MISCELLANEOUS
  1171.            -------------
  1172.  
  1173.            The HOW command can now display the name of the currently loading extension in the same
  1174.            manner that is automatically done when you enter MacsBug at boot time. This is useful for
  1175.            bug log reports since this command is already part of the StdLog macro.
  1176.  
  1177.            When dumping the MMU state on an '030 or '851, the "PSR" register is no longer incorrectly
  1178.            called "SR".
  1179.  
  1180.  
  1181. • 6.5d9 - TOTALLY NEW STUFF
  1182.           -----------------
  1183.           Added the DMA command (dump memory in ASCII).  The syntax is just like DM.
  1184.  
  1185.           Added .S suffix ("strip").  For example, PC.S is the same as PC if you are
  1186.           in 32-bit MMU mode, or (PC & 0x00FFFFFF) if you are in 24-bit MMU mode.
  1187.           MacsBug actually calls the StripAddress trap to implement this.
  1188.  
  1189.  
  1190.           ENHANCEMENTS
  1191.           ------------
  1192.           When you break into MacsBug at boot time by holding down the Control key, now
  1193.           it shows a more enlightening message.  Hopefully this will stop people from
  1194.           writing up bugs that say "I rebooted with the control key held down, and I got
  1195.           a User Break!"
  1196.  
  1197.           When you break into MacsBug during boot, it displays the name of the currently-
  1198.           loading extension, if any.
  1199.           
  1200.           Command lines consisting only of "G", "T", or "S" do not appear in the command
  1201.           line history (Command-V / Command-B).  The side-effect is that Command-G, -S,
  1202.           and -T do not enter anything into the command line history.
  1203.  
  1204.           The SET command now displays its syntax if you tell it something stupid.
  1205.  
  1206.           "HZ" shows "Mod" for Modern Memory Manager heaps (it used to say "Fig").
  1207.  
  1208.           The "WH" command, and others, can determine that an address is "inside MacsBug".
  1209.  
  1210.           The "DV" command includes some credits.  "dv v" shows just the version, with
  1211.           no credits.  MacsBug gets its version from its 'vers' 1 resource.
  1212.  
  1213.           The CurApName display uses an ellipsis character to truncate long names, rather
  1214.           than an underscore.
  1215.  
  1216.           Added an 8-bit-deep blitter (speeds up display on video cards that cannot switch
  1217.           to 1-bit mode).  Made the one-bit blitter faster, too.  Made scrolling up and
  1218.           down faster for all bit depths.
  1219.           
  1220.  
  1221.           MACROS
  1222.           ------
  1223.           Changed the maximum command line length to 250 (was around 90 before).  So now you
  1224.           can have very long macro expansions.
  1225.  
  1226.           Added a macro called "StdLog" (standard log), which is great for writing up bug
  1227.           reports.  It creates a log file full of info that system software engineers like
  1228.           (stack crawls, register dump, configuration info, etc).
  1229.  
  1230.           Lots of random cleanups of the macros.  Removed redundant macros.
  1231.  
  1232.           Changed "da" and "dd" macros to "DApp" and "DDrvr", because "da" and "dd" are valid
  1233.           hex numbers.
  1234.  
  1235.  
  1236.           DISASSEMBLY
  1237.           -----------
  1238.           Trap vector names now show up in disassembly (and elsewhere) just as if you had a
  1239.           macro mapping into every address in the trap dispatch table.  For example,
  1240.           MOVEA.L $06F4,A0 now disassembles as MOVEA.L jCacheFlush,A0.  The trap is vCacheFlush,
  1241.           but the "v" (for vector) gets automatically changed to a "j" (for jump).
  1242.  
  1243.           The forms JSR ([$xxxx]) and JSR ([$xxxx],$yyyy) now support macro-style symbols for
  1244.           the $xxxx values.
  1245.           
  1246.           (Of course, do NOT use trap-table addresses in application code, but when you come
  1247.           across the system doing so, it's much easier to see what's going on now.)
  1248.  
  1249.           Fixed bugs in selector comparison (it was not always sign extending correctly).
  1250.  
  1251.           Disassembly now recognizes a CLR.W before a trap word as setting up selector with
  1252.           value zero.
  1253.  
  1254.           The PC disassembly window refreshes when you change D0-D7, A0-A7, SR, or PC.  It
  1255.           was only refreshing on PC changes, but the others also affect the disassembly,
  1256.           because of symbolic info on JSR (Ax), "will branch" messages, and "will loop" (DBxx)
  1257.           messages.
  1258.  
  1259.  
  1260.           TRAP NAMES
  1261.           ----------
  1262.           Generally brought tons of traps and selectors up to date and made them better.
  1263.  
  1264.           Updated PowerMgrDispatch stuff to match WWDC 94 Technology CD document.  However,
  1265.           MacsBug can't handle the different variants of OS-range traps having different names
  1266.           and different selectors, so the $A085 trap disassembles strangely.  The $A685
  1267.           (PowerMgrDispatch) stuff is all there, but it (incorrectly) shows up for all variants
  1268.           ($A085, $A285, $A485, as well as $A685).
  1269.  
  1270.  
  1271.           DCMDS
  1272.           -----
  1273.           Several commands now draw bullet characters in place of all control characters in
  1274.           strings (affects 'file' showing Return characters in filenames, for example).
  1275.         
  1276.           Gestalt command dumps all Gestalt selectors.  Supports System 7.5 Gestalt table format
  1277.           as well as older versions.
  1278.         
  1279.           The 'rd' command now shows an asterisk after any handle that has been purged.  It also
  1280.           accepts capital letters for the options.
  1281.  
  1282.  
  1283.           BUG FIXES
  1284.           ---------
  1285.           Fixed some random memory accesses that were happening on non-Color QuickDraw machines
  1286.           during MacsBug startup.  This was causing the mouse to freeze in one or two directions
  1287.           on a Mac Plus.
  1288.  
  1289.           Fixed trashing of D3 and A2 in BlitCharOneBit and BlitCharEightBits.
  1290.  
  1291.           Changed PBControlSync to PBStatusSync because we were trying to do a cscGetMode
  1292.           instead of a cscSetMode.  (Affects compatibility with certain video drivers.)
  1293.  
  1294.  
  1295. • 6.5d8      TOTALLY NEW STUFF
  1296.           -----------------
  1297.           
  1298.           Over the last few releases, we've worked to make MacsBug a bit more user-
  1299.           configurable and customizable. However, these configuration options have
  1300.           thus far been limited to setting bits in a preference resource, which
  1301.           doesn't allow for many on-the-fly changes. We've added a new general-purpose
  1302.           command that will enable behaviour changes any time you wish. The new command,
  1303.           SET, will be able to take a variety of options. The first is the new
  1304.           "ScrollPrompt" feature. By entering a command such as, "SET SCROLLPROMPT OFF",
  1305.           MacsBug can be told to never wait for a key if a new page of the scrollback
  1306.           history has become filled. Other variants of the new command are shown in
  1307.           the built-in help. In the future you'll find lots of other cool things you'll
  1308.           be able to do.
  1309.  
  1310.           There's now a 512-byte scratch memory area within MacsBug that's available for
  1311.           whatever you like. It's called "PlayMem" (TMON user's will recognize this), and
  1312.           can be used within any expression. The constant will evaluate to the address of
  1313.           the beginning of the buffer area.
  1314.  
  1315.           A-TRAP DISASSEMBLY
  1316.           ------------------
  1317.  
  1318.           Removed bogus duplicate A-trap name for StdOpcodeProc (it's really $ABF8;
  1319.           it was also in the table as $ABC8).
  1320.  
  1321.           Fixed vFileReal to be vFileRead.
  1322.  
  1323.           Unused/unknown A-traps now disassemble as "DC.W $Axyz" instead of "TB z" or "OS z".
  1324.  
  1325.           Lots of new names have been added to previously existing selectors, but they are
  1326.           too numerous to go into here.
  1327.  
  1328.           All calls have been updated to the more verbose new Inside Macintosh naming
  1329.           conventions. All old versions still work through the magic of macros.
  1330.           
  1331.           Disassembling selector-based calls is now much smarter when it comes to identifying
  1332.           the correct call. When it looks back up the code stream to identify the selector
  1333.           value, it is more knowledgeable about the various MOVE immediate instructions.
  1334.           It no longer unhelpfully interprets random data as selector values.
  1335.  
  1336.           A-TRAP TRACING
  1337.           --------------
  1338.           
  1339.           It now correctly works again (no more _Open calls). It'll be more verbose in the
  1340.           future, but at least it now does what it did before.
  1341.  
  1342.           A-TRAP RECORDING
  1343.           ----------------
  1344.  
  1345.           Versions of MacsBug from 6.4 through 6.5d6 had a serious bug that appeared
  1346.           during A-Trap recording. When recording OS calls, we save the first 8 bytes
  1347.           pointed to by register A0, for display by the 'ATP' command. In the
  1348.           instances that A0 isn't an input parameter to the trap, and contains an
  1349.           invalid pointer (outside of valid memory on the target machine), MacsBug
  1350.           takes the precaution of installing a special bus error handler when it
  1351.           attempts to copy the data. However, previous versions improperly installed
  1352.           the handler (they hooked on top of two vectors, both of which were wrong).
  1353.           Thus, if a bus error occurred during the copy, MacsBug's primary handler
  1354.           would    take control and display the error to the user, which was completely
  1355.           the wrong thing to do.
  1356.  
  1357.           HEAP DUMPS
  1358.           ----------
  1359.           
  1360.           When MacsBug dumps heaps that contain resources from open files, it is more
  1361.           careful in showing the error, "** bad rsrc map**".          
  1362.  
  1363.           SCROLLBACK HISTORY
  1364.           ------------------
  1365.  
  1366.           The supported sizes of the scrollback history buffer have been changed to
  1367.           allow for a much larger buffer. Previously, only values of 0-32767 were
  1368.           supported, which specified the requested history buffer size in bytes. 0
  1369.           and 1-255 indicated that no history buffer should be allocated at all. Now
  1370.           values of 32768-65535 are valid, and 1-255 indicate special larger sizes.
  1371.           For 1-255, the value is multiplied by 64K, giving a range of 64K-16MB in
  1372.           64K increments. Zero is still supported to allocate no buffer.
  1373.  
  1374.           (Page Up/Down mostly work, but there are still a few problems.)
  1375.  
  1376.           SYMBOL LOOKUP
  1377.           -------------
  1378.           
  1379.           If we break into MacsBug with VM enabled and paging isn't safe, we now act
  1380.           as though symbol display is turned off (via the "SX" command). Doing symbol
  1381.           lookups causes heaps throughout memory to be walked, possibly causing quite
  1382.           a bit of paging to take place. This is an extremely evil thing for a low-level
  1383.           debugger to do, and we're trying to be as nice as we possibly can.
  1384.  
  1385.           COMMAND-: SYMBOL LOOKUP
  1386.           -----------------------
  1387.           
  1388.           Fixed the infamous C++ unmangled symbols problem. MacsBug would show you the
  1389.           symbol in the Command-: window, but it wouldn't evaluate it unless you stripped
  1390.           the quotes from the unmangled name. This is no longer necessary.
  1391.           
  1392.           If you hold down the Option key when pressing return after selecting a symbol,
  1393.           the address of the symbol is entered onto the command line, rather than the
  1394.           symbol itself. However, if you navigate the list by typing and use this feature,
  1395.           it used to dump a semi-random address. This has been fixed.
  1396.  
  1397.           MEMORY DISPLAY
  1398.           --------------
  1399.           
  1400.           When displaying addresses that correspond to bus error vectors (0x00000008
  1401.           through 0x0000000B and VBR+0x00000008 through VBR+0x0000000B), we now show the
  1402.           previous vector addresses, not the MacsBug handlers. This should make it a bit
  1403.           easier to find your code if you replace either bus error vector.
  1404.  
  1405.           The built-in font now contains the entire high-ASCII character set for a more
  1406.           useful display ($20 through $D9). You can now type all of these characters as
  1407.           well.
  1408.  
  1409.           Template related code has been fixed to not cause address errors on 68000
  1410.           machines.
  1411.  
  1412.           STACK CRAWL
  1413.           -----------
  1414.           
  1415.           When determining if a given address is really a return address as we walk up
  1416.           the stack, we no longer cause page faults. This should make the stack crawl
  1417.           commands a bit more useful when used in an environment where VM paging is not
  1418.           safe.
  1419.  
  1420.           BREAKPOINTS
  1421.           -----------
  1422.           
  1423.           If you set or clear a breakpoint, the disassembly display area above the command
  1424.           line will be redrawn, in case there's an upcoming break that's already been called
  1425.           out with a bullet alongside an address.
  1426.  
  1427.           REGISTERS
  1428.           ---------
  1429.           
  1430.           Code dealing with setting and displaying the Status Register now realizes it is
  1431.           16-bits in length and always has been. This bug has been present since at least
  1432.           6.2.
  1433.  
  1434.           LOGGING
  1435.           -------
  1436.           
  1437.           If you attempt to turn the log on or off when the file system is busy, MacsBug
  1438.           will warn you that this is impossible. This helps a bit in preventing data on
  1439.           your drives from being corrupted, but there's still a huge architectural flaw
  1440.           in the whole thing (ask me about my 400 MB I had to restore from tape...). In a
  1441.           nutshell, it works, but just barely.
  1442.  
  1443.           MISCELLANEOUS
  1444.           -------------
  1445.           
  1446.           Keyboard repeat rates have been fixed for the Mac Plus (it no longer spews tens of
  1447.           keys for each individual keypress).
  1448.  
  1449.           DCMDS
  1450.           -----
  1451.           
  1452.           RD - The help explains what the various attributes flags are. Map $0003 shows up
  1453.           with a special name now, instead of garbage (it makes ROM resources override the
  1454.           system). The command aborts much faster now if you press a key. Fixed problems of
  1455.           excess filtering when you used -f along with -t or -i (or when you used -i at all).
  1456.  
  1457.  
  1458. • 6.5d7 - NOTE: This version sorta-kinda exists. It was released to a small number of
  1459.           individuals related to the System 7.5 and PowerPC v0 teams, but it was never
  1460.           generally released. There are actually a few different versions of d7, so it was
  1461.           decided the best thing to do was say, "don't use it - use 6.5d8 instead".
  1462.  
  1463.  
  1464. • 6.5d6 - HEAP SCRAMBLING
  1465.           ---------------
  1466.  
  1467.           It works again, what more can I say? Starting with MacsBug 6.5d1 (before I
  1468.           took over the project), the Heap Scramble command was broken for all Memory
  1469.           Managers, including 24-bit, 32-bit, and Modern. It now works properly for
  1470.           the classic Memory Managers, and for the first time, is works equally well
  1471.           for Modern-style blocks and heaps.
  1472.  
  1473.           If you break into MacsBug because of a Heap Scramble failure, the proper
  1474.           tool name will be displayed. It used to try to display the names of
  1475.           selector-based tools, but failed, since we only scramble on a few real
  1476.           A-Traps. All you would see is a bunch of gunk, but no harm was done.
  1477.  
  1478.           EXCEPTION HANDLER
  1479.           -----------------
  1480.           
  1481.           While you're sitting at the command line, MacsBug has its own bus error
  1482.           handler installed. If something goes wrong, you'll generally see the
  1483.           message "Unable to access that address". However, if the exception was
  1484.           generated by code within MacsBug, finding the code that actually caused
  1485.           the exception was quite difficult. Now MacsBug displays some simple
  1486.           diagnostic information, including the Program Counter of the code that
  1487.           really caused the exception.
  1488.  
  1489.  
  1490. • 6.5d5 - With the addition of "User Debugger Prefs" there's been a lot of confusion.
  1491.           So, in an effort to reduce this, and make absolutely sure each version of
  1492.           MacsBug has available the resources it needs to run, "User Debugger Prefs"
  1493.           is no longer supported, and the Debugger Prefs resources now exist within
  1494.           MacsBug itself (that's why it's now almost 400K on disk). All custom
  1495.           resources should go into Debugger Prefs, and MacsBug's resources should be
  1496.           left alone.
  1497.  
  1498.         - We now check for duplicate dcmds at startup and display their names.
  1499.           You'll see this list (if you have any duplicates) the first time you enter
  1500.           MacsBug.
  1501.  
  1502.         - Increased the number of words that DH can disassemble at once from 6 to 18.
  1503.  
  1504.         - Fixed a minor bug with A-Trap actions. If you had an action set on any
  1505.           selector, removed it, and then did an 'ATSS', 'ATB', or 'ATHC' with no
  1506.           parameters, the range start would appear to be the old selector. We were
  1507.           setting the selector flag and value fields in the trap record if the
  1508.           selector was specifically described, and we weren't clearing them
  1509.           otherwise. Since the new action record was in the location of the old
  1510.           record, the uninitialized fields were used.
  1511.  
  1512.         - When an A-Trap Trace is displayed, we now show the name of the selector
  1513.           instead of its parent A-Trap, if necessary. This means if you do an 'ATT'
  1514.           on _GetFrontProcess, for instance, when the trace information is dumped
  1515.           into the MacsBug history, the trap name will be _GetFrontProcess instead
  1516.           of its parent, _OSDispatch.
  1517.  
  1518.         - When you break into MacsBug because of an A-Trap action on a selector-
  1519.           based call, the selector name will be displayed instead of the parent
  1520.           A-Trap name.
  1521.         
  1522.         - We now mostly work on 68000 machines (again). If the trap name STR#
  1523.           resources were an odd length, we'd address error at startup while trying to
  1524.           load them. We now pad them in memory to be word-aligned, just like all of
  1525.           our other structures (would you belive I solved this one with MicroBug?)
  1526.  
  1527.         - Updated the TestDcmd application:
  1528.             -Made the font draw like they do Macsbug (you get space through ~, plus
  1529.              ≈ and † and … and •, and everything else is a bullet).
  1530.             -Made Command-G = Command-Q.
  1531.             -Made ? = help.
  1532.             -When the screen is paused, still proccess events except for non-Command
  1533.              keypresses.
  1534.             -Made space continue as well as return/enter.
  1535.             -Made Clear/Ctrl-X clear the command line.
  1536.  
  1537.         - In the 'file' dcmd, made some columns wider and fixed the filename-prefix
  1538.           feature.
  1539.  
  1540.         - In the 'drvr' dcmd, widened the driver name field so you can see longer
  1541.           names without truncation.
  1542.  
  1543.  
  1544. • 6.5d4 - Fixed command line history to not get confused when you repeat a previous
  1545.           command with Command-V or Command-B. It wasn't resetting the history marker
  1546.           when you entered a new command that exactly matched the last command, so you
  1547.           could only repeat the last command once, and then the last command would
  1548.           become the line prior to that.
  1549.           
  1550.         - Fixed a nasty bug dealing with most break action commands. If you set more
  1551.           than one A-Trap break, A-Trap Step Spy, or Breakpoint, each new break
  1552.           would overwrite the previous, corrupting it. The record that could become
  1553.           the most damaged was that of the Step Spy, which could cause MacsBug to
  1554.           become way confused the next time it walked the table. Almost not broken
  1555.           just isn't good enough for me!
  1556.  
  1557.         - Breaking on selector-based calls now works! If you want to break on one of
  1558.           these calls, ATB (and all of its variants) now use the same structures
  1559.           that provided for the disassembly of selector-based calls. I've slightly
  1560.           modifed the displays for the ATB and ATD commands to account for the fact
  1561.           that you're not necessarially breaking on all calls of a specific ATrap.
  1562.           It now shows you both the selector name and ATrap name, plus the ATrap
  1563.           and selector values.
  1564.  
  1565.           The way that this works is cool enough that you can still provide a
  1566.           conditional break expression which allows for even more fine-tuning of
  1567.           when to break. So something like, "ATB _GetFrontProcess D0.w=-1" will
  1568.           work, even though in most cases it's not really that useful, since in this
  1569.           case it's already implicitly breaking on the expression "(SP)^.w=39".
  1570.           
  1571.           If there are calls that you can't seem to break on, there are a number of
  1572.           reasons why. The most-likely is that I simply haven't yet added calls of
  1573.           that particular A-Trap to the prefs file (although it could be there and
  1574.           I simply screwed up the selector).
  1575.           
  1576.         - Because of the above, I've removed lots of redundant macros from the 
  1577.           Debugger Prefs file (the ones that did the "ATB _CallName d0.w=#x").
  1578.  
  1579.         - MacsBug now supports a new preference resource (which can be located in
  1580.           either the User or standard Debugger Prefs file) of type 'mxpr'. Its
  1581.           sole purpose in life right now is to support some cool power-user
  1582.           "danger prefs" that support doing things a bit faster. There's a ResEdit
  1583.           TMPL provided in Debugger Prefs which allows you to edit the various
  1584.           defined bits. I recommend copying it into your User Debugger Prefs file
  1585.           (since that's why I added the file anyway) and changing it there.
  1586.           I'll probably eventually add new commands to MacsBug itself that let you
  1587.           modify the more useful preferences at run-time.
  1588.         
  1589.         - Two preferences bits support disabling the little-known self-checksum
  1590.           feature. Normally, after you execute any command from the command-line,
  1591.           MacsBug performs a checksum on all of its code, and warns you if it was
  1592.           modified. While this can be quite useful, most will never see the message.
  1593.           The annoying bit is that this takes a heck of a lot of time (MacsBug's
  1594.           code is about 100K in memory right now, so on my analyzer-bait Mac II the
  1595.           checksum takes 151.1ms).
  1596.           
  1597.           Now you can selectively disable the checksum in all cases by setting the
  1598.           "Never checksum MacsBug code" bit. If you'd like some assurances that
  1599.           MacsBug wasn't stomped on, you can set the "Only checksum code on entry"
  1600.           bit. When you enter MacsBug, either through a DebugStr or Debugger trap
  1601.           or via an NMI, it will perform the checksum. Note that the "never" bit
  1602.           overrides the setting of this bit.
  1603.  
  1604.         - One other bit has quite a noticeable effect on stepping and tracing with
  1605.           a machine that has a single monitor (or one that has MacsBug on its main
  1606.           device). This bit, "Don't swap screen if stepping", does just what it
  1607.           says. If you step with this bit set, MacsBug will never swap the display
  1608.           to show the original video buffer. This is slightly dangerous if you're
  1609.           stepping code that does draw directly to the screen (because the video
  1610.           card could have been in an entirely different mode than what it is when
  1611.           you're in MacsBug). However, it will have no effect if you trace over a
  1612.           QuickDraw trap, because the display _will_ be swapped in that case. Use
  1613.           this, it's waaaaay cool. And faster too.
  1614.  
  1615.         - Added macros for GSBug users (me) who just can't seem to type the right
  1616.           commands while in MacsBug. STB now works for ATB, CTB now works for ATC,
  1617.           and SH works for ATD (actually, these were added in 6.5d2, but I neglected
  1618.           to mention it then).
  1619.  
  1620.         - Twiddled the message for MCC when a macro is cleared. It now says,
  1621.           "Macro '<macroname>' cleared" instead of "'<macroname>' cleared.
  1622.           Dave freaked for a second when he typed "MCC heap", and MacsBug responded
  1623.           with "Heap cleared". :-)
  1624.  
  1625.          - Modified the 'vbl' dcmd to use uppercase in hex displays (we're picky
  1626.           people). It now dumps all of the non-empty slot VBL queues in addition to
  1627.           the standard queue.
  1628.  
  1629.  
  1630. • 6.5d3 - Modified to load selector traps, macros, templates, and DCMDs from two files.
  1631.           We still load from Debugger Prefs, however, we now support a new file, "User
  1632.           Debugger Prefs". This allows you to paste all of your custom resources into
  1633.           the User file, and not worry about having to copy resources when you upgrade
  1634.           the standard DP file. We also now allow 'mxbi', 'mxbc' and 'KCHR' resources
  1635.           to be found in the User file to override the default ones we ship in the DP file.
  1636.           
  1637.           This change causes all of the above mentioned resources to be loaded in
  1638.           the opposite order that they were in previous versions (all types of
  1639.           resources are now loaded increasing from index 1).
  1640.  
  1641.         - The Clear key and Control-X now clear the entire command line and move the
  1642.           cursor to the left edge.
  1643.  
  1644.         - The key delay to repeat and repeat rate have been (hopefully) equalized
  1645.           for all machines. No more annoying slowness on fast machines.
  1646.  
  1647.         - Sped up the one-bit single character blitter to be as fast as it was in
  1648.           6.2.2. The overall string drawing throughput is slower than 6.2.2, but
  1649.           it'll probably get faster in later versions. As compared to 6.5d2, however,
  1650.           the blitter is 6.3 times faster, which is quite cool.
  1651.  
  1652.  
  1653. • 6.5d2 - Added a new resource type, 'mxst', to Debugger Prefs for the display of
  1654.           toolcall names that are selector-based (ie. HFSDispatch). This allows you
  1655.           to see the names of the real calls, rather than simply the dispatch trap name.
  1656.           Eventually you'll be able to break on the names, instead of having to define
  1657.           macros like you do now. I added a bunch of toolcall names to Debugger Prefs,
  1658.           but there are certainly some missing, and there may be some that are incorrect.
  1659.  
  1660.  
  1661. • 6.5d1 - Moved toolbox and OS trapnames into STR# resources in the Debugger Prefs
  1662.           file. Added initial support for the Modern Memory Manager.
  1663.  
  1664.           
  1665. • 6.4a9 - Fix breakpoints in ROM to actually break.
  1666.         - Fix to not mess with the interupt levels if we enter MacsBug in user mode.
  1667.  
  1668.           
  1669. • 6.4a8 - Fix problem with the calculation of video slot address causing some
  1670.           machines to not boot.
  1671.         - Remove indication of bit depth from MacsBug screen. This bit depth was
  1672.           indicating what the depth MacsBug was operating in not the depth of the
  1673.           monitor when running normally.
  1674.   
  1675.  
  1676. • 6.4a7 - Support for multibit video.